#include "type.h"
#include "message.h"
#include "protect.h"
void memcpy(u32*,u32*,int);
void dispStr(char*);
void init_prot(void);
void disp_int(int);
void init_descriptor(struct descriptor*,u32,u32,u8,u8);
u32	seg2phys(struct descriptor*);
void hwint0();
void StackTop();
unsigned char gdt_ptr[6];
unsigned char idt_ptr[6];
struct descriptor gdt[GDT_SIZE];
struct gate idt[IDT_SIZE];
struct tss	t_tss;
struct tss	s_tss;
void main( ){
	memcpy((u32*)gdt,(u32*)(*((u32*)&gdt_ptr[2])),*((u16*)gdt_ptr)+1);
	u16* gdt_limit=(u16*)gdt_ptr;
	*gdt_limit=GDT_SIZE*sizeof(struct descriptor)-1;
	u32* gdt_base=(u32*)(&gdt_ptr[2]);
	*gdt_base=(u32*)gdt;
	u16* idt_limit=(u16*)idt_ptr;
	*idt_limit=IDT_SIZE*sizeof(struct gate)-1;
	u32* idt_base=(u32*)(&idt_ptr[2]);
	*idt_base=(u32*)idt;

	init_prot();
	t_tss.ss0=16;
	t_tss.esp=StackTop;
	init_descriptor(&gdt[4],vir2phys(seg2phys(&gdt[1]),&t_tss),
				sizeof(struct tss)-1,DA_TSS,0);
	t_tss.iobase=sizeof(struct tss);
}
void love(){
	dispStr("love\n");
}
